﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tanmia.Basis.Core;

namespace Tanmia.Warehouse.Core
{
    /// <summary>
    /// الحركة المستودعية, وهي حجر الأساس في نظام تنمية للمستودعات
    /// </summary>
    public class StockMovement : BaseBusinessObject
    {
        private int stockMovementID;
        private double quantity;
        private double price;
        private DateTime movementDate;
        private double movedQuantity;
        private Store store;
        private Item item;
        private ItemUnit itemUnit;
        private IList<StockMovementDetail> details;
        private ItemUnitPrice itemUnitPrice;

        /// <summary>
        /// رقم تعريف الحركة المستودعية
        /// </summary>
        public virtual int StockMovementID
        {
            get { return stockMovementID; }
            set { SetValue<int>("StockMovementID", ref stockMovementID, value); }
        }

        /// <summary>
        /// الكمية التي تحركت فيها هذه المادة, ملاحظة: "واحدة قياس هذه الكمية إضافة إلى عام الضرب مسجلين في نفس سجل الحركة".
        /// </summary>
        public virtual double Quantity
        {
            get { return quantity; }
            set { SetValue<double>("Quantity", ref quantity, value); }
        }

        /// <summary>
        /// سعر الواحدة, السعر الذي تحركت فيه المادة, وهو سعر الواحدة (القطعة) حسب وحدة القياس المحددة في سجل الحركة.
        /// </summary>
        public virtual double Price
        {
            get { return price; }
            set { SetValue<double>("Price", ref price, value); }
        }

        /// <summary>
        /// تاريخ ووقت الحركة
        /// </summary>
        public virtual DateTime MovementDate
        {
            get { return movementDate; }
            set { SetValue<DateTime>("MovementDate", ref movementDate, value); }
        }

        /// <summary>
        /// الكمية بواحدة القياس الأساسية (الصغرى) وذات إشارة موجبة أو سالبة حسب نوع الحركة.
        /// </summary>
        public virtual double MovedQuantity
        {
            get { return movedQuantity; }
            set { SetValue<double>("MovedQuantity", ref movedQuantity, value); }
        }

        /// <summary>
        /// المستودع الذي حصلت به الحركة
        /// </summary>
        public virtual Store Store
        {
            get { return store; }
            set { SetValue<Store>("Store", ref store, value); }
        }

        /// <summary>
        /// المادة المتحركة
        /// </summary>
        public virtual Item Item
        {
            get { return item; }
            set { SetValue<Item>("Item", ref item, value); }
        }

        /// <summary>
        /// بيانات وحدة قياس الكمية المتحركة
        /// </summary>
        public virtual ItemUnit ItemUnit
        {
            get { return itemUnit; }
            set { SetValue<ItemUnit>("ItemUnit", ref itemUnit, value); }
        }

        /// <summary>
        /// تفاصيل الحركة
        /// </summary>
        public virtual IList<StockMovementDetail> Details
        {
            get { return details; }
            set { SetValue<IList<StockMovementDetail>>("Details", ref details, value); }
        }

        /// <summary>
        /// بيانات سعر المادة بواحدة القياس المحددة
        /// </summary>
        public virtual ItemUnitPrice ItemUnitPrice
        {
            get { return itemUnitPrice; }
            set { SetValue<ItemUnitPrice>("ItemUnitPrice", ref  itemUnitPrice, value); }
        }

    }
}
